package com.klun.huiwen;

import java.util.Random;

public class StringTest {

    /**
     * 找到最长的无重复子串
     * @param str
     * @return
     */
    public static int maxUnique(String str){
        if(str == null || str.equals("")){
            return 0;
        }
        char[] chars = str.toCharArray();
        int[] map = new int[256];
        for (int i = 0; i < 256; i++) {
            map[i] = -1;
        }
        int len = 0; // 最大无重复子串的长度
        int pre = -1; // 最
        int cur = 0;
        for (int i = 0; i != chars.length; i++) {
            /*
            chars[i]        ： 当前字符
            map[chars[i]]   ： i之前当前出现过的字符的最大位置
            pre             ： 重复字符出现过的最大位置
            cur             ： 当前位置减去pre
            len             ： 最长长度和刚算出来的长度
             */
            pre = Math.max(pre,map[chars[i]]); //前一个和后一个的最大值
            cur = i - pre;
            len = Math.max(len,cur);
            map[chars[i]] = i; // 更新当前字符出现过的最大位置
        }
        return len;
    }

    public static void main(String[] args) {
        StringBuffer s = generateString(new Random(),SOURCES,10);
        System.out.println(s);
        String a = s.toString();
        int whm = maxUnique("ababa");
        System.out.println(whm);
    }


    public static final String SOURCES =
            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    /**
     * Generate a random string.
     * @return
     */
    public static StringBuffer generateString(Random random ,String characters ,int length) {
        char[] text = new char[length];
        for (int i = 0; i < length; i++) {
            text[i] = characters.charAt(random.nextInt(characters.length()));
        }
        return new StringBuffer(new String(text));
    }
}
